Flash memory is used in a wide variety of products including many types of computing, communication, and consumer electronic devices. Flash memory is a type of nonvolatile memory. Flash memory has been used as file systems for storing data. One such system is the Flash Data Integrator (FDI), which has been used in cell phones and other electronic devices.
The FDI is intended to fully support numerous applications. The FDI can be used to store both code and data. Typically, the FDI code will include low level functions, which perform write and erase operations of the FDI data. Write and erase operations in flash occurs through the low level functions.
Flash consists of multiple modes such as status, read, and write/erase. The flash is set to a specific mode depending on what operation needs to be executed. For example, before an erase operation can be performed, the flash is required to be switched to the write/erase mode. In order to read code from the FDI, the flash needs to be in the read mode. When reading the code, data operations can be performed at the same time by downloading the low level functions that perform write and erase to data into random access memory (RAM).
Unlike flash, which has different modes, RAM is typically in read mode all the time. By downloading the low level functions that performs the write and erase data operations into RAM, the code can be executed while writing and erasing the flash part at the same time. Once the low level functions are downloaded to RAM, the flash can be in any mode. The low level functions are called from RAM instead of the flash memory. Hence, the RAM executes the low level algorithm to perform writes and erases irrespective of what mode the flash is in.
Because the flash memory block can only be placed in one mode at a time, it is not possible to download or read the code from flash to RAM at the same time as a data operation is being performed. If a read or write operation is being performed on data, the operation generally has to be suspended before the code can be read from the flash memory. Thus, every time a read operation is performed on flash, all other operations are usually suspended before the read operation can occur. Specifically, the procedure of suspending a preempted erase operation to perform a preempting read operation is known as a chopped erase.
As a result of being able to perform only one operation at a time on the flash, it is typically necessary to constantly poll for higher priority commands while the low level function is being performed to determine if there is any code that needs to be executed right away. If there is a higher priority command, then an interrupt is executed and the low level function operation is suspended until the preempting operation is completed. However, having to poll for interrupts and suspending tasks prior to servicing interrupts can potentially result in undesirable performance effects such as substantial interrupt latency and periodic chopped erases.